﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace VIA.SiMoJi.Domain
{
    public class ZKTEcoResponse
    {
        public override string ToString()
        {
            return "OK";
        }
    }

    public class InitializeResponse : ZKTEcoResponse
    {
        /// <summary>
        /// 客户端的序列号
        /// </summary>
        public string SN { get; set; }
        /// <summary>
        /// 是否上传时间戳"考勤记录"
        /// </summary>
        public bool ATTLOGStamp { get; set; }
        /// <summary>
        /// 是否上传时间戳"操作记录"
        /// </summary>
        public bool OPERLOGStamp { get; set; }
        /// <summary>
        /// 是否上传时间戳"考勤图片"
        /// </summary>
        public bool ATTPHOTOStamp { get; set; }
        /// <summary>
        /// 是否上传时间戳"一体化模板"
        /// </summary>
        public bool BIODATAStamp { get; set; }
        /// <summary>
        /// 是否上传时间戳"身份证信息"
        /// </summary>
        public bool IDCARDStamp { get; set; }
        /// <summary>
        /// 是否上传时间戳"异常日志"
        /// </summary>
        public bool ERRORLOGStamp { get; set; }
        /// <summary>
        /// 联网失败后客户端重新联接服务器的间隔时间（秒）建议设置30~300秒
        /// </summary>
        public int ErrorDelay { get; set; } = 30;
        /// <summary>
        /// 正常联网时客户端联接服务器的间隔时间(秒),即客户端请求“获取命令”功能,建议设置2~60秒,需要快速响应时可设置小点,但是对服务器的压力会变大
        /// </summary>
        public int Delay { get; set; } = 30;
        /// <summary>
        /// 客户端定时检查并传送新数据时间（时:分,24小时格式),多个时间用分号分开, 最多支持10个时间, 如TransTimes=00:00;14:00。
        /// </summary>
        public string TimeScan { get; set; } = "08:00;20:00;";
        /// <summary>
        /// 客户端检查并传送新数据间隔时间（分钟),当设置为0时,不检查,如TransInterval=1
        /// </summary>
        public int TransInterval { get; set; } = 1;
        /// <summary>
        /// 客户端向服务器自动上传哪些数据的标识， 设置的值支持两种格式
        /// </summary>
        public TransFlag[] TransFlags { get; set; }
        /// <summary>
        /// 是否加密传送数据标识， 支持通信加密的场合， 该参数需设置为1
        /// </summary>
        public bool Encrypt { get; set; }
        public override string ToString()
        {
            var builder = new StringBuilder();
            builder.AppendLine($"GET OPTION FROM: {SN}");
            builder.AppendLine($"ATTLOGStamp={(ATTLOGStamp ? "1" : "0")}");
            builder.AppendLine($"OPERLOGStamp={(OPERLOGStamp ? "1" : "0")}");
            builder.AppendLine($"ATTPHOTOStamp={(ATTPHOTOStamp ? "1" : "0")}");
            builder.AppendLine($"BIODATAStamp={(BIODATAStamp ? "1" : "0")}");
            builder.AppendLine($"IDCARDStamp={(IDCARDStamp ? "1" : "0")}");
            builder.AppendLine($"ERRORLOGStamp={(ERRORLOGStamp ? "1" : "0")}");
            builder.AppendLine($"ErrorDelay={ErrorDelay}");
            builder.AppendLine($"Delay={Delay}");
            builder.AppendLine($"TransTimes={TimeScan}");
            builder.AppendLine($"TransInterval={TransInterval}");
            builder.AppendLine($"TransFlag=TransData {string.Join("\t", TransFlags)})");
            builder.AppendLine("TimeZone=8");
            builder.AppendLine("Realtime=1");
            builder.AppendLine("Encrypt=None");
            return builder.ToString();
        }
    }
}
